package com.jiwei.community.handler.exception;

/**
 * @Author 季伟
 * 功能：统一异常处理
 *
 * '@ControllerAdvice'注解：
 * 初定义拦截规则：
 * ControllerAdvice 提供了多种指定Advice规则的定义方式，
 * 默认什么都不写，则是Advice所有Controller，当然你也可以通过下列的方式指定规则
 * 写成@ControllerAdvice("org.my.pkg")
 * 或者 @ControllerAdvice(basePackages="org.my.pkg"),
 * 则匹配org.my.pkg包及其子包下的所有Controller，
 * 当然也可以用数组的形式指定，
 * 如：@ControllerAdvice(basePackages={"org.my.pkg", "org.my.other.pkg"}),
 * 也可以通过指定注解来匹配，比如我自定了一个 @CustomAnnotation 注解，
 * 我想匹配所有被这个注解修饰的 Controller,
 * 可以这么写：@ControllerAdvice（annotations={CustomAnnotation.class}
 * '@ExceptionHandler'注解：
 * '@ControllerAdvice' 配合 @ExceptionHandler 实现全局异常处理
 *
 *
 */
import com.jiwei.community.enums.AppHttpCodeEnum;
import com.jiwei.community.exception.SystemException;
import com.jiwei.community.vo.ResponseResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

@ControllerAdvice
@ResponseBody//将返回值放入响应体中最后给客户端
//@RestControllerAdvice以上两种的结合
@Slf4j
public class GableExceptionHandler {
    @ExceptionHandler(SystemException.class)
    public ResponseResult systemException(SystemException e){
        log.error("出现了异常!",e);
        return ResponseResult.errorResult(e.getCode(),e.getMsg());
    }
    @ExceptionHandler(Exception.class)
    public ResponseResult exceptionHandler(Exception e){
        log.error("出现异常！",e);
        return ResponseResult.errorResult(AppHttpCodeEnum.SYSTEM_ERROR,e.getMessage());
    }

}
